package com.example.demo.controller;

import com.example.demo.commom.Result;
import com.example.demo.entity.Book;
import com.example.demo.entity.Reservation;
import com.example.demo.mapper.BookMapper;
import com.example.demo.mapper.ReservationMapper;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

@RestController
@RequestMapping("reservation")
public class ReservationController {
    // 预约
    ReservationMapper reservationMa;
    // 书籍
    BookMapper bookMapper;

    // 图书预约
    // 传读者readerId和书籍的isbn
    // 判断读者是否已经存在预约（在reservation表中存在数据）
    // 已经存在预约书籍则返回提示msg：同一用户短时间内不可预约多本书

    // 新增一条预约记录
    @PostMapping("addReservation")
    public Result addReservation(@RequestParam Integer readerId,
                                 @RequestParam String isbn) {
        // 查看当前id是否已经有预约记录
        // 如果有则返回提示：同一用户短时间内不能预约多本图书
        // reservationMapper.existsByReaderId(readerId)
        if (reservationMa.selectById(readerId) != null) {
            return Result.success("用户预约书籍已达上限");
        }
        // 检查书籍是否为可预约
        Book book = bookMapper.selectById(isbn);
        if (book.getStatus() != "0") {
            return Result.success("当前图书不可预约");
        }
        // 否则在表reservation中新增一条预约记录
        Reservation reservation = new Reservation();
        reservation.setReaderId(readerId);
        reservation.setIsbn(isbn);
        Date stateTime = new Date();
        LocalDateTime localDateTime = stateTime.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime()
                .plusDays(5); // 加5天
        Date endTime = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
        reservation.setStateTime(stateTime);
        reservation.setEndTime(endTime);
        reservationMa.insert(reservation);
        // 同时更新书book表对应的isbn的书的状态status为2（表示预约状态）
        book.setStatus("2");
        bookMapper.updateById(book);
        return Result.success("预约成功，请在五天内办理借书");
    }
    // 删除一条预约记录
    @PostMapping("delReservation")
    public Result delReservation () {
        // 根据传进来的isbn在表reservation中进行查找
        // 首先查找book表中对应的isbn书籍查看状态是否不为2
        // 如果不为2则在表reservation中删除对应的isbn的预约记录并返回
        // 如果当前时间大于预约到期时间endTime
        // 则在表reservation中删除对应的记录
        // 同时在book表中更新对应isbn的书的状态status为0
        // 然后返回
        return null;
    }
}
